/* queue.h */
/* basic queue ops */
 
#ifndef _QUEUE_H
#define _QUEUE_H
  
/* the inner structure is opaque */
typedef struct s_queue *queue;
   
/* Basic ops are macro */
#define empty_queue() (NULL)
#define queue_is_empty(s) (!(s))
    
/* standard queue ops */
     
/* push an element on the queue and return the new queue */
queue q_push(void *x, queue s);
     
/* take the first element of a non-empty queue and return it. */
/* queue is modified */
void *take(queue *s);
       
#endif
/* END: queue.h */

